// Toshiba T3992  (Lectra 12D)
// 
// Pin	Function	11	7	3
// 1	+3.3V
// 2	GND
// 3				8
// 4			1	9
// 5			2	0
// 6			3
// 7			4
// 8			5
// 9			6
// 10			7		C
// 11  	1,2,3,4,5,6,7 enabler
// 12
// 13


// Keyboard layout

 //   1	2	3	4	5	6
// --------------------------------------------------------------
// 1      5,10       7,10     8,10     9,10     6,9        5,9
 //   ->	Sum	MC	MR	M-	M+
// 
// 2      7,8       10,11     3,7       4,7       8,9        7,9
// 	sqr	7	8	9	?	?
// 
// 3      3,4         7,11     8,11     9,11     4,8        5,8
// 	+/-	4	5	6	-	/
// 
// 4      3,10       4,11     5,11     6,11       void 	6,8
 //   CE	1	2	3		X
// 
// 5      4,10       3,11     5,7       6,7       3,8        4,9
 //   C	0	00	.	+	=


int p3=3;
int p4=4;
int p5=5;
int p6=6;
int p7=7;
int p8=8;
int p9=9;
int p10=10;
int p11=11;
//------------------------
void setup() {                
  pinMode(p3, INPUT);  
  pinMode(p4, INPUT);  
  pinMode(p5, INPUT);  
  pinMode(p6, INPUT);   
  pinMode(p7, INPUT);  
  pinMode(p8, INPUT);  
  pinMode(p9, INPUT); 
  pinMode(p10, INPUT);  
  pinMode(p11, INPUT);  
  Serial.begin(9600);
}
//------------------------
void digit(int n)
{
  //Serial.print("digit:");Serial.println(n);
  int x,y;
  if(n==0){x=p3; y=p11;}
  if(n==1){x=p4; y=p11;}
  if(n==2){x=p5; y=p11;}
  if(n==3){x=p6; y=p11;}
  if(n==4){x=p7; y=p11;}
  if(n==5){x=p8; y=p11;}
  if(n==6){x=p9; y=p11;}
  if(n==7){x=p10; y=p11;}
  if(n==8){x=p3; y=p7;}
  if(n==9){x=p4; y=p7;}
  if(n==99){x=p4; y=p10;} // CLEAR
  if(n==98){x=p4; y=p9;} // =
  if(n==97){x=p3; y=p8;} // +  
  if(n==96){x=p4; y=p8;} // -  
  if(n==95){x=p7; y=p8;} // SQRT
  if(n==94){x=p6; y=p7;} // .
  if(n==93){x=p6; y=p8;} // mult
  if(n==92){x=p5; y=p8;} // div
  pinMode(x, INPUT); 
  pinMode(y, OUTPUT);   
  delay(100);

  int first = 0;
  for(int k=0;k<8000;k++)
  {
   int v = digitalRead(x);
   if(v == HIGH)
   {
    if(first==2)digitalWrite(y, HIGH);  
    first = 1;
   } 
   else   
   {   
    if(first==2)digitalWrite(y, LOW); 
    if(first==1)first = 2;
   }
  }  
  digitalWrite(y, LOW);
  pinMode(x, INPUT); 
  pinMode(y, INPUT);   
  delay(100);
}

//------------------------
void sendDigit(char x)
{
 if(x=='0')digit(0);
 if(x=='1')digit(1);
 if(x=='2')digit(2);
 if(x=='3')digit(3);
 if(x=='4')digit(4);
 if(x=='5')digit(5);
 if(x=='6')digit(6);
 if(x=='7')digit(7); 
 if(x=='8')digit(8);
 if(x=='9')digit(9);
 if(x=='.')digit(94);
}
//------------------------
void dispNumberS(String ss)
{
  int i=0;
  char x;
  char number[50];
  
  ss.toCharArray(number,10);
  x = number[0];
  while(x != '\0')
  {
    x = number[i];
    sendDigit(x); 
    i++;
  }
}
//------------------------
void dispNumber(double number)
{
    double temp,work;
    double  ten = 1000000000.;
    work = number;
    int iz = 0,con = 0;
    while(con == 0)
    {
       temp = floor(work/ten);
       Serial.print(work);Serial.print(", ten:");Serial.print(ten);Serial.print(", temp:");Serial.println(temp);
       if(temp!=0 || iz==1){iz=1;digit(temp);}
       work = work - temp*ten;
       if(ten == 1)digit(94);
       if(work== 0.00){con = 1;Serial.print(", stop:");Serial.println(work);}
       ten = ten/10.;
   }   
}

//------------------------
//------------------------
void loop() {
   digit(99);  //CLEAR

   int res = analogRead(A0);
   Serial.print("ser:");Serial.println(res);
   String sss = String(res);
   dispNumberS(sss);
   delay(1000);
   
      digit(99);  //CLEAR
   
   String sss2 = String("123.46");
   dispNumberS(sss2);
   delay(1000);
}
